package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.controller.EmpController;
import com.itheima.entity.*;
import com.itheima.mapper.EmpExprMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.service.EmpLogService;
import com.itheima.service.EmpService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.awt.print.Pageable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


@Service
public class EmpServiceImpl implements EmpService {

    private final Logger log = LoggerFactory.getLogger(EmpController.class);
    @Autowired
    private EmpMapper empMapper;


    @Autowired
    private EmpExprMapper empExprMapper;


    @Autowired
    private EmpLogService empLogService;



//    /**
//     * 分页查询
//     * @param page  页码
//     * @param pageSize  每页记录数
//     * @return
//     */
//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//        //1.调用mapper获取总记录数 total
//        Long total = empMapper.count();
//        //2.调用mapper获取分页数据 rows
//        Integer start = (page - 1) * pageSize;
//        List<Emp> empList = empMapper.page(start,pageSize);
//        //3.封装PageBean对象并返回
//
//        return new PageBean(total,empList);
//    }


//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//
//        //1.设置分页参数
//        PageHelper.startPage(page, pageSize);
//        //2.调用mapper的查询方法
//        List<Emp> empList = empMapper.list();
//
//        //分页只会对PageHelper.startPage下面的第一条select进行处理
//        //List<Emp> empList2 = empMapper.list();
//        //3.封装pagebean对象并返回
//
//        Page p = (Page) empList;//page继承了arraylist
//
//        return new PageBean(p.getTotal(), p.getResult());
//    }

//    @Override
//    public PageBean page(String name, Integer gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
//
//        //1.设置分页参数
//        PageHelper.startPage(page, pageSize);
//        //2.调用mapper的查询方法
//        List<Emp> empList = empMapper.list(name,gender,begin,end);
//
//        //分页只会对PageHelper.startPage下面的第一条select进行处理
//        //List<Emp> empList2 = empMapper.list();
//        //3.封装pagebean对象并返回
//
//        Page p = (Page) empList;//page继承了arraylist
//
//        return new PageBean(p.getTotal(), p.getResult());
//    }

    @Override
    public PageBean page(EmpQueryParam param) {
        //1.设置分页参数
        PageHelper.startPage(param.getPage(), param.getPageSize());
        //2.调用mapper的查询方法
        List<Emp> empList = empMapper.list(param);

        //分页只会对PageHelper.startPage下面的第一条select进行处理
        //List<Emp> empList2 = empMapper.list();
        //3.封装pagebean对象并返回

        Page p = (Page) empList;//page继承了arraylist

        return new PageBean(p.getTotal(), p.getResult());
    }
    @Transactional//开启事务
    @Override
    public void save(Emp emp) {
        try {
            //1.调用mapper，保存员工的信息到emp表
            //1.1补充缺失的字段
            emp.setPassword("123456");
            emp.setCreateTime(LocalDateTime.now());
            emp.setUpdateTime(LocalDateTime.now());
            empMapper.insert(emp);
            //2.调用mapper，保存员工的工作经历到emp_expr
            List<EmpExpr> exprList = emp.getExprList();
            //2.1关联员工id
            if (!CollectionUtils.isEmpty(exprList)) {
                exprList.forEach((expr) -> {
                    expr.setEmpId(emp.getId());
                });
            //2.2批量保存
                empExprMapper.insertBatch(exprList);

            }
        } finally {
            //无论新增员工成功与否，都要添加操作日志
            EmpLog empLog = new EmpLog();
            empLog.setOperateTime(LocalDateTime.now());
            empLog.setInfo("插入员工信息："+emp);
            empLogService.insertLog(empLog);
        }

    }




}
